package request

import (
	"time"

	"gitcode.com/G-YT/baoyou/server/model/common/request"
	"gitcode.com/G-YT/baoyou/server/model/user"
)

// LoginRequest 手机号密码登录请求
// 用途：用于进行手机号+密码的登录流程
// 字段：
// - phone: 用户手机号
// - password: 登录密码
type LoginRequest struct {
	Phone    string `json:"phone" binding:"required" validate:"required"`
	Password string `json:"password" binding:"required" validate:"required"`
}

// CodeLoginRequest 短信验证码登录请求
// 用途：用于进行短信验证码登录流程
// 字段：
// - serviceStationID: 服务站ID
// - healthManagerID: 健管师ID
// - phone: 用户手机号
// - code: 短信验证码
type CodeLoginRequest struct {
	ServiceStationID uint   `json:"serviceStationID"`
	HealthManagerID  uint   `json:"healthManagerID"`
	Phone            string `json:"phone" binding:"required" validate:"required"`
	Code             string `json:"code" binding:"required" validate:"required"`
}

// OneClickLoginRequest 一键登录请求（SDK预留）
// 用途：一键登录成功回调后，进行用户数据存储
// 字段：
// - phone: 用户手机号
// - serviceStationID: 服务站ID（非空）
// - healthManagerID: 健管师ID（非空）
type OneClickLoginRequest struct {
	Phone            string `json:"phone" binding:"required" validate:"required"`
	ServiceStationID uint   `json:"serviceStationID"`
	HealthManagerID  uint   `json:"healthManagerID"`
}

// SetPasswordRequest 设置密码
// 用途：首次登录设置密码
// 字段：
// - phone: 用户手机号
// - password: 新密码
// - confirmPassword: 确认新密码
type SetPasswordRequest struct {
	Password        string `json:"password" binding:"required" validate:"required"`
	ConfirmPassword string `json:"confirmPassword" binding:"required,eqfield=Password" validate:"required"`
}

// ChangePhoneRequest 更换手机号
// 用途：更换手机号
// 字段：
// - phone: 新手机号
// - code: 验证码
type ChangePhoneRequest struct {
	Phone string `json:"phone" binding:"required" validate:"required"`
	Code  string `json:"code" binding:"required" validate:"required"`
}

// UpdateUserRequest 修改用户信息
type UpdateUserRequest struct {
	ID           uint      `json:"id"`
	Name         string    `json:"name"`
	Avatar       string    `json:"avatar"`
	Sex          uint      `json:"sex"`
	Phone        string    `json:"phone"`
	Birthday     time.Time `json:"birthday"`
	Province     uint      `json:"province"`
	City         uint      `json:"city"`
	Area         uint      `json:"area"`
	Addr         string    `json:"addr"`
	Contact      string    `json:"contact"`
	ContactPhone string    `json:"contactPhone"`
}

// Authorize 微信授权
type Authorize struct {
	OpenID string `json:"openID" example:"微信OpenID"`
}

// PasswordLogin 密码登陆
type PasswordLogin struct {
	Phone    string `json:"phone"`    // 用户手机号/账号
	Password string `json:"password"` // 登录密码
}

// CodeLogin 验证码登陆
type CodeLogin struct {
	Phone string `json:"phone"` // 用户手机号/账号
	Code  string `json:"code"`  // 验证码
}

// ChangePassword 修改密码
type ChangePassword struct {
	ID          uint   `json:"-"`           // 从 JWT 中提取id，避免越权
	Password    string `json:"password"`    // 密码
	NewPassword string `json:"newPassword"` // 新密码
	Code        string `json:"code"`        // 验证码
}

// ForgetPassword 忘记密码
type ForgetPassword struct {
	Phone string `json:"phone"` // 用户手机号/账号
	Code  string `json:"code"`  // 短信验证码
}

type PromotionUserSearch struct {
	StewardID uint   `json:"stewardID"`
	Name      string `json:"name" form:"name"`
	Phone     string `json:"phone" form:"phone"`
}

type UserSearch struct {
	user.User
	StartCreatedAt *time.Time `json:"startCreatedAt" form:"startCreatedAt"`
	EndCreatedAt   *time.Time `json:"endCreatedAt" form:"endCreatedAt"`
	request.PageInfo
}

type QRCode struct {
	StewardID    uint `json:"steward_id" form:"steward_id"`
	InviteUserID uint `json:"invite_user_id" form:"invite_user_id"`
}

type SunCode struct {
	ID uint `json:"id" form:"id"`
}
